home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / nss / blapit.h < prev    next >
C/C++ Source or Header  |  2006-04-20  |  11KB  |  373 lines

  1. /*
  2.  * blapit.h - public data structures for the crypto library
  3.  *
  4.  * ***** BEGIN LICENSE BLOCK *****
  5.  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  6.  *
  7.  * The contents of this file are subject to the Mozilla Public License Version
  8.  * 1.1 (the "License"); you may not use this file except in compliance with
  9.  * the License. You may obtain a copy of the License at
  10.  * http://www.mozilla.org/MPL/
  11.  *
  12.  * Software distributed under the License is distributed on an "AS IS" basis,
  13.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  14.  * for the specific language governing rights and limitations under the
  15.  * License.
  16.  *
  17.  * The Original Code is the Netscape security libraries.
  18.  *
  19.  * The Initial Developer of the Original Code is
  20.  * Netscape Communications Corporation.
  21.  * Portions created by the Initial Developer are Copyright (C) 1994-2000
  22.  * the Initial Developer. All Rights Reserved.
  23.  *
  24.  * Contributor(s):
  25.  *   Dr Vipul Gupta <vipul.gupta@sun.com> and
  26.  *   Douglas Stebila <douglas@stebila.ca>, Sun Microsystems Laboratories
  27.  *
  28.  * Alternatively, the contents of this file may be used under the terms of
  29.  * either the GNU General Public License Version 2 or later (the "GPL"), or
  30.  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  31.  * in which case the provisions of the GPL or the LGPL are applicable instead
  32.  * of those above. If you wish to allow use of your version of this file only
  33.  * under the terms of either the GPL or the LGPL, and not to allow others to
  34.  * use your version of this file under the terms of the MPL, indicate your
  35.  * decision by deleting the provisions above and replace them with the notice
  36.  * and other provisions required by the GPL or the LGPL. If you do not delete
  37.  * the provisions above, a recipient may use your version of this file under
  38.  * the terms of any one of the MPL, the GPL or the LGPL.
  39.  *
  40.  * ***** END LICENSE BLOCK ***** */
  41. /* $Id: blapit.h,v 1.18 2005/11/07 18:44:21 wtchang%redhat.com Exp $ */
  42.  
  43. #ifndef _BLAPIT_H_
  44. #define _BLAPIT_H_
  45.  
  46. #include "seccomon.h"
  47. #include "prlink.h"
  48. #include "plarena.h"
  49. #include "ecl-exp.h"
  50.  
  51.  
  52. /* RC2 operation modes */
  53. #define NSS_RC2            0
  54. #define NSS_RC2_CBC        1
  55.  
  56. /* RC5 operation modes */
  57. #define NSS_RC5                 0
  58. #define NSS_RC5_CBC             1
  59.  
  60. /* DES operation modes */
  61. #define NSS_DES            0
  62. #define NSS_DES_CBC        1
  63. #define NSS_DES_EDE3        2
  64. #define NSS_DES_EDE3_CBC    3
  65.  
  66. #define DES_KEY_LENGTH        8    /* Bytes */
  67.  
  68. /* AES operation modes */
  69. #define NSS_AES                 0
  70. #define NSS_AES_CBC             1
  71.  
  72. #define DSA_SIGNATURE_LEN     40    /* Bytes */
  73. #define DSA_SUBPRIME_LEN    20    /* Bytes */
  74.  
  75. /* XXX We shouldn't have to hard code this limit. For
  76.  * now, this is the quickest way to support ECDSA signature
  77.  * processing (ECDSA signature lengths depend on curve
  78.  * size). This limit is sufficient for curves upto
  79.  * 576 bits.
  80.  */
  81. #define MAX_ECKEY_LEN             72    /* Bytes */
  82.  
  83. /*
  84.  * Number of bytes each hash algorithm produces
  85.  */
  86. #define MD2_LENGTH        16    /* Bytes */
  87. #define MD5_LENGTH        16    /* Bytes */
  88. #define SHA1_LENGTH        20    /* Bytes */
  89. #define SHA256_LENGTH         32     /* bytes */
  90. #define SHA384_LENGTH         48     /* bytes */
  91. #define SHA512_LENGTH         64     /* bytes */
  92. #define HASH_LENGTH_MAX         SHA512_LENGTH
  93.  
  94. /*
  95.  * Input block size for each hash algorithm.
  96.  */
  97.  
  98. #define MD2_BLOCK_LENGTH      64     /* bytes */
  99. #define MD5_BLOCK_LENGTH      64     /* bytes */
  100. #define SHA1_BLOCK_LENGTH      64     /* bytes */
  101. #define SHA256_BLOCK_LENGTH      64     /* bytes */
  102. #define SHA384_BLOCK_LENGTH     128     /* bytes */
  103. #define SHA512_BLOCK_LENGTH     128     /* bytes */
  104. #define HASH_BLOCK_LENGTH_MAX     SHA512_BLOCK_LENGTH
  105.  
  106. #define AES_KEY_WRAP_IV_BYTES    8
  107. #define AES_KEY_WRAP_BLOCK_SIZE  8  /* bytes */
  108. #define AES_BLOCK_SIZE          16  /* bytes */
  109.  
  110. #define NSS_FREEBL_DEFAULT_CHUNKSIZE 2048
  111.  
  112. /*
  113.  * these values come from the intial key size limits from the PKCS #11
  114.  * module. They may be aribitarily adjusted to any value freebl supports
  115.  * RSA_MAX_MODULUS_BITS is not defined since there is only memory constraints
  116.  * on the largest RSA Modulus that PKCS #11 or freebl may support.
  117.  */
  118. #define RSA_MIN_MODULUS_BITS   128
  119. #define DH_MIN_P_BITS           128
  120. #define DH_MAX_P_BITS         2236
  121.  
  122. /*
  123.  * The FIPS 186 algorithm for generating primes P and Q allows only 9
  124.  * distinct values for the length of P, and only one value for the
  125.  * length of Q.
  126.  * The algorithm uses a variable j to indicate which of the 9 lengths
  127.  * of P is to be used.
  128.  * The following table relates j to the lengths of P and Q in bits.
  129.  *
  130.  *    j    bits in P    bits in Q
  131.  *    _    _________    _________
  132.  *    0     512        160
  133.  *    1     576        160
  134.  *    2     640        160
  135.  *    3     704        160
  136.  *    4     768        160
  137.  *    5     832        160
  138.  *    6     896        160
  139.  *    7     960        160
  140.  *    8    1024        160
  141.  *
  142.  * The FIPS-186 compliant PQG generator takes j as an input parameter.
  143.  */
  144.  
  145. #define DSA_Q_BITS       160
  146. #define DSA_MAX_P_BITS    1024
  147. #define DSA_MIN_P_BITS     512
  148.  
  149. /*
  150.  * function takes desired number of bits in P,
  151.  * returns index (0..8) or -1 if number of bits is invalid.
  152.  */
  153. #define PQG_PBITS_TO_INDEX(bits) \
  154.     (((bits) < 512 || (bits) > 1024 || (bits) % 64) ? \
  155.     -1 : (int)((bits)-512)/64)
  156.  
  157. /*
  158.  * function takes index (0-8)
  159.  * returns number of bits in P for that index, or -1 if index is invalid.
  160.  */
  161. #define PQG_INDEX_TO_PBITS(j) (((unsigned)(j) > 8) ? -1 : (512 + 64 * (j)))
  162.  
  163.  
  164. /***************************************************************************
  165. ** Opaque objects 
  166. */
  167.  
  168. struct DESContextStr        ;
  169. struct RC2ContextStr        ;
  170. struct RC4ContextStr        ;
  171. struct RC5ContextStr        ;
  172. struct AESContextStr        ;
  173. struct MD2ContextStr        ;
  174. struct MD5ContextStr        ;
  175. struct SHA1ContextStr       ;
  176. struct SHA256ContextStr     ;
  177. struct SHA512ContextStr     ;
  178. struct AESKeyWrapContextStr ;
  179.  
  180. typedef struct DESContextStr        DESContext;
  181. typedef struct RC2ContextStr        RC2Context;
  182. typedef struct RC4ContextStr        RC4Context;
  183. typedef struct RC5ContextStr        RC5Context;
  184. typedef struct AESContextStr        AESContext;
  185. typedef struct MD2ContextStr        MD2Context;
  186. typedef struct MD5ContextStr        MD5Context;
  187. typedef struct SHA1ContextStr       SHA1Context;
  188. typedef struct SHA256ContextStr     SHA256Context;
  189. typedef struct SHA512ContextStr     SHA512Context;
  190. /* SHA384Context is really a SHA512ContextStr.  This is not a mistake. */
  191. typedef struct SHA512ContextStr     SHA384Context;
  192. typedef struct AESKeyWrapContextStr AESKeyWrapContext;
  193.  
  194. /***************************************************************************
  195. ** RSA Public and Private Key structures
  196. */
  197.  
  198. /* member names from PKCS#1, section 7.1 */
  199. struct RSAPublicKeyStr {
  200.     PRArenaPool * arena;
  201.     SECItem modulus;
  202.     SECItem publicExponent;
  203. };
  204. typedef struct RSAPublicKeyStr RSAPublicKey;
  205.  
  206. /* member names from PKCS#1, section 7.2 */
  207. struct RSAPrivateKeyStr {
  208.     PRArenaPool * arena;
  209.     SECItem version;
  210.     SECItem modulus;
  211.     SECItem publicExponent;
  212.     SECItem privateExponent;
  213.     SECItem prime1;
  214.     SECItem prime2;
  215.     SECItem exponent1;
  216.     SECItem exponent2;
  217.     SECItem coefficient;
  218. };
  219. typedef struct RSAPrivateKeyStr RSAPrivateKey;
  220.  
  221.  
  222. /***************************************************************************
  223. ** DSA Public and Private Key and related structures
  224. */
  225.  
  226. struct PQGParamsStr {
  227.     PRArenaPool *arena;
  228.     SECItem prime;    /* p */
  229.     SECItem subPrime; /* q */
  230.     SECItem base;     /* g */
  231.     /* XXX chrisk: this needs to be expanded to hold j and validationParms (RFC2459 7.3.2) */
  232. };
  233. typedef struct PQGParamsStr PQGParams;
  234.  
  235. struct PQGVerifyStr {
  236.     PRArenaPool * arena;    /* includes this struct, seed, & h. */
  237.     unsigned int  counter;
  238.     SECItem       seed;
  239.     SECItem       h;
  240. };
  241. typedef struct PQGVerifyStr PQGVerify;
  242.  
  243. struct DSAPublicKeyStr {
  244.     PQGParams params;
  245.     SECItem publicValue;
  246. };
  247. typedef struct DSAPublicKeyStr DSAPublicKey;
  248.  
  249. struct DSAPrivateKeyStr {
  250.     PQGParams params;
  251.     SECItem publicValue;
  252.     SECItem privateValue;
  253. };
  254. typedef struct DSAPrivateKeyStr DSAPrivateKey;
  255.  
  256. /***************************************************************************
  257. ** Diffie-Hellman Public and Private Key and related structures
  258. ** Structure member names suggested by PKCS#3.
  259. */
  260.  
  261. struct DHParamsStr {
  262.     PRArenaPool * arena;
  263.     SECItem prime; /* p */
  264.     SECItem base; /* g */
  265. };
  266. typedef struct DHParamsStr DHParams;
  267.  
  268. struct DHPublicKeyStr {
  269.     PRArenaPool * arena;
  270.     SECItem prime;
  271.     SECItem base;
  272.     SECItem publicValue;
  273. };
  274. typedef struct DHPublicKeyStr DHPublicKey;
  275.  
  276. struct DHPrivateKeyStr {
  277.     PRArenaPool * arena;
  278.     SECItem prime;
  279.     SECItem base;
  280.     SECItem publicValue;
  281.     SECItem privateValue;
  282. };
  283. typedef struct DHPrivateKeyStr DHPrivateKey;
  284.  
  285. /***************************************************************************
  286. ** Data structures used for elliptic curve parameters and
  287. ** public and private keys.
  288. */
  289.  
  290. /*
  291. ** The ECParams data structures can encode elliptic curve 
  292. ** parameters for both GFp and GF2m curves.
  293. */
  294.  
  295. typedef enum { ec_params_explicit,
  296.            ec_params_named
  297. } ECParamsType;
  298.  
  299. typedef enum { ec_field_GFp = 1,
  300.                ec_field_GF2m
  301. } ECFieldType;
  302.  
  303. struct ECFieldIDStr {
  304.     int         size;   /* field size in bits */
  305.     ECFieldType type;
  306.     union {
  307.         SECItem  prime; /* prime p for (GFp) */
  308.         SECItem  poly;  /* irreducible binary polynomial for (GF2m) */
  309.     } u;
  310.     int         k1;     /* first coefficient of pentanomial or
  311.                          * the only coefficient of trinomial 
  312.                          */
  313.     int         k2;     /* two remaining coefficients of pentanomial */
  314.     int         k3;
  315. };
  316. typedef struct ECFieldIDStr ECFieldID;
  317.  
  318. struct ECCurveStr {
  319.     SECItem a;          /* contains octet stream encoding of
  320.                          * field element (X9.62 section 4.3.3) 
  321.              */
  322.     SECItem b;
  323.     SECItem seed;
  324. };
  325. typedef struct ECCurveStr ECCurve;
  326.  
  327. struct ECParamsStr {
  328.     PRArenaPool * arena;
  329.     ECParamsType  type;
  330.     ECFieldID     fieldID;
  331.     ECCurve       curve; 
  332.     SECItem       base;
  333.     SECItem       order; 
  334.     int           cofactor;
  335.     SECItem       DEREncoding;
  336.     ECCurveName   name;
  337.     SECItem       curveOID;
  338. };
  339. typedef struct ECParamsStr ECParams;
  340.  
  341. struct ECPublicKeyStr {
  342.     ECParams ecParams;   
  343.     SECItem publicValue;   /* elliptic curve point encoded as 
  344.                 * octet stream.
  345.                 */
  346. };
  347. typedef struct ECPublicKeyStr ECPublicKey;
  348.  
  349. struct ECPrivateKeyStr {
  350.     ECParams ecParams;   
  351.     SECItem publicValue;   /* encoded ec point */
  352.     SECItem privateValue;  /* private big integer */
  353.     SECItem version;       /* As per SEC 1, Appendix C, Section C.4 */
  354. };
  355. typedef struct ECPrivateKeyStr ECPrivateKey;
  356.  
  357. typedef void * (*BLapiAllocateFunc)(void);
  358. typedef void (*BLapiDestroyContextFunc)(void *cx, PRBool freeit);
  359. typedef SECStatus (*BLapiInitContextFunc)(void *cx, 
  360.                    const unsigned char *key, 
  361.                    unsigned int keylen,
  362.                    const unsigned char *, 
  363.                    int, 
  364.                    unsigned int ,
  365.                    unsigned int );
  366. typedef SECStatus (*BLapiEncrypt)(void *cx, unsigned char *output,
  367.                 unsigned int *outputLen, 
  368.                 unsigned int maxOutputLen,
  369.                 const unsigned char *input, 
  370.                 unsigned int inputLen);
  371.  
  372. #endif /* _BLAPIT_H_ */
  373.